package com.cnap.service;

import com.cnap.model.stage.StageDeployParam;
import com.cnap.model.stage.StageDetailTypeEnum;
import com.cnap.model.stage.StageVO;
import com.cnap.model.stage.UpdateStageParam;

import java.util.List;
import java.util.Map;

/**
 * 分布式部署服务类
 *
 * @author xc
 **/
public interface DistributeDeployService {

    /**
     * 分部署部署
     *
     * @param deployParam 部署参数
     */
    void startDistributeDeploy(StageDeployParam deployParam);

    /**
     * 部署微服务
     *
     * @param svcIds 微服务列表
     */
    void startDistributeDeploy(List<String> svcIds);

    /**
     * 根据服务id查询阶段信息
     *
     * @param svcId 微服务信息
     * @return 结果
     */
    StageVO getStageInfoByServiceId(String svcId);

    /**
     * 根据应用id查询该应用下微服务的阶段信息
     *
     * @param appId 应用id
     * @return 结果
     */
    List<StageVO> getStagesInfoByAppId(String appId);

    /**
     * 根据服务id重试
     *
     * @param svcId svcId
     */
    void retryByServiceId(String svcId);

    /**
     * 更新阶段状态
     *
     * @param updateStageParam 参数
     * @return 结果
     */
    boolean updateStage(UpdateStageParam updateStageParam);

    /**
     * 根据id删除阶段信息
     *
     * @param serviceId 服务id
     * @return 结果
     */
    boolean deleteStagesByServiceId(String serviceId);

    /**
     * 更新extraInfo
     *
     * @param svcId          微服务id
     * @param detailTypeEnum 具体阶段信息
     * @param extraInfos     extraInfos
     */
    void updateExtraInfo(String svcId, StageDetailTypeEnum detailTypeEnum, List<Map<String, String>> extraInfos);

    /**
     * 根据服务id和类型删除
     *
     * @param svcId 微服务id
     * @param type  类型
     */
    void deleteStagesBySvcIdAndType(String svcId, String type);

}
